-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "wifidemo"
VERSION = "1.0.0"

-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
require("sysplus")
require('variable')

-- 打印系统信息
-- function meminfo()
--     log.info("lua", rtos.meminfo())
--     log.info("sys", rtos.meminfo("sys"))
-- end

sys.taskInit(function()
    sys.wait(1000)
    wlan.init()
    -- 修改成自己的ssid和password
    -- wlan.connect("myssid", "mypassword", 1)
    wlan.connect("zcgg", "chen88888", 1)
    log.info("wlan", "wait for IP_READY")

    while not wlan.ready() do
        local ret, ip = sys.waitUntil("IP_READY", 30000)
        -- wlan连上之后, 这里会打印ip地址
        log.info("ip", ret, ip)
        if ip then
            _G.wlan_ip = ip
        end
    end
    log.info("wlan", "ready !!", wlan.getMac())
    sys.wait(1000)
    -- 开启http服务 监听本机80端口
    httpsrv.start(80, function(fd, method, uri, headers, body)
        log.info("httpsrv", method, uri, json.encode(headers), body)
        log.info('body', body)
        -- meminfo()
        if uri == "/" then -- 设备扫描
            return 200, {}, "dev_ok"
        elseif uri == "/queryData" then -- 查询数据
            if json.decode(body) then -- 判断数据是否为json格式
                _body = json.decode(body) -- 是,--把body编码为json格式
                log.info('_body', json.encode(_body.type))
            else -- 不是
                local data = {
                    err = 'JsonErr'
                }
                return 200, {}, json.encode(data)
            end
            -- 判断各种请求
            if _body.type == 'getTemp1' then -- 查温度1
                local data = {
                    Temp1 = Temp1 -- 换算温度，并保留1位小数
                }
                return 200, {}, json.encode(data)

            elseif _body.type == 'getTemp2' then -- 查温度2
                local data = {
                    Temp2 = Temp2
                }
                return 200, {}, json.encode(data)

            elseif _body.type == 'getWeight' then -- 查重量
                Weight = getWeight(maopi)
                if Weight == -1 then
                    Weight = 0
                end
                local data = {
                    Weight = Weight
                }
                return 200, {}, json.encode(data)
            elseif _body.type == 'Weight_Zero' then -- 去皮/清零
                maopi = readWeight(HX711_DTPIN, HX711_SCKPIN)
                local data = {
                    Weight_Zero = 'ok'
                }
                return 200, {}, json.encode(data)
            elseif _body.type == 'getPressure' then -- 查气压
                local data = {
                    Pressure = Pressure
                }
                return 200, {}, json.encode(data)
            elseif _body.type == 'getFlow' then -- 获取流量 水压过小无法充满管道会导致计数不准
                Flow = pulseCount * 1.1 -- 毫升 实际使用可根据现场情况，调整此值，获得更准的流量
                local data = {
                    Flow = Flow
                }
                return 200, {}, json.encode(data)

            elseif _body.type == 'FlowZero' then -- 流量清零
                pulseCount = 0
                Flow = pulseCount * 1.1 -- 毫升
                local data = {
                    Flow = Flow
                }
                return 200, {}, json.encode(data)
            elseif _body.type == 'setRealy' then -- 控制继电器
                if _body.num == 'relay1' then
                    if _body.sta == 'on' then
                        setRealy(Realy1_PIN, "on")
                    elseif _body.sta == 'off' then
                        setRealy(Realy1_PIN, "off")
                    end
                    local data = {
                        RelaySta1 = RelaySta1
                    }
                    return 200, {}, json.encode(data) -- 返回继电器状态
                elseif _body.num == 'relay2' then
                    if _body.sta == 'on' then
                        setRealy(Realy2_PIN, 'on')
                    elseif _body.sta == 'off' then
                        setRealy(Realy2_PIN, 'off')
                    end
                    local data = {
                        RelaySta2 = RelaySta2
                    }
                elseif _body.num == 'relay3' then
                    if _body.sta == 'on' then
                        setRealy(Realy3_PIN, 'on')
                    elseif _body.sta == 'off' then
                        setRealy(Realy3_PIN, 'off')
                    end
                    local data = {
                        RelaySta3 = RelaySta3
                    }
                    return 200, {}, json.encode(data) -- 返回继电器状态
                end
            elseif _body.type == 'getRealy' then -- 查询继电器开关状态
                local data = {
                    RelaySta1 = RelaySta1,
                    RelaySta2 = RelaySta2,
                    RelaySta3 = RelaySta3,
                }
                return 200, {}, json.encode(data) -- 返回继电器状态

            else
                local data = {
                    data = 'TypeErr'
                }
                return 200, {}, json.encode(data) -- 参数错误
            end
        else
            return 404, {}, "Not Found" .. uri
        end
    end)
    log.info("web", "pls open url http://" .. _G.wlan_ip .. "/")
end)

-- 初始化及读取温度
sys.taskInit(function()
    sys.wait(1000)
    log.info('SPI BEGIN')
    -- 初始化spi
    spi.setup(spi_id, nil, 0, 1, 8, 10000)
    -- 初始化HX711值
    maopi = readWeight(HX711_DTPIN, HX711_SCKPIN) -- 获取毛皮 将称清零
    log.info('Weight', getWeight(maopi))

    while 1 do
        cs(0)
        spi.send(spi_id, string.char(0x80, 0xD1)) -- 配置寄存器，配置芯片模式
        cs(1)
        sys.wait(100)

        cs(0)
        spi.send(spi_id, string.char(0x01)) -- 读寄存器01
        d1 = spi.recv(spi_id, 1):toHex()
        cs(1)
        -- log.info('0x01', d1)  --寄存器1

        cs(0)
        spi.send(spi_id, string.char(0x02)) -- 读寄存器02
        d2 = spi.recv(spi_id, 1):toHex()
        cs(1)
        -- log.info('0x02', d2) --寄存器2

        _res = tonumber(d1 .. d2, 16) >> 1 -- 得到AD值

        -- log.info('_res', _res)
        R = _res * (430 / 32768) -- 计算阻值
        -- log.info('阻值', R)

        if R >= 100 then -- 计算温度值
            Temp2 = (R - 100) / 0.385
        else
            Temp2 = (R - 100) / 0.407
        end
        Temp2 = string.format("%.1f", Temp2) -- 只保留一位小数
		
		--复制后的温度2
		cs2(0)
        spi.send(spi_id, string.char(0x80, 0xD1)) -- 配置寄存器，配置芯片模式
        cs2(1)
        sys.wait(100)

        cs2(0)
        spi.send(spi_id, string.char(0x01)) -- 读寄存器01
        d1_2 = spi.recv(spi_id, 1):toHex()
        cs2(1)
        -- log.info('0x01', d1)  --寄存器1

        cs2(0)
        spi.send(spi_id, string.char(0x02)) -- 读寄存器02
        d2_2 = spi.recv(spi_id, 1):toHex()
        cs2(1)
        -- log.info('0x02', d2) --寄存器2

        _res_2 = tonumber(d1_2 .. d2_2, 16) >> 1 -- 得到AD值

        -- log.info('_res', _res)
        R_2 = _res_2 * (430 / 32768) -- 计算阻值
        -- log.info('阻值', R)

        if R_2 >= 100 then -- 计算温度值
            Temp1 = (R_2 - 100) / 0.385
        else
            Temp1 = (R_2 - 100) / 0.407
        end
        Temp1 = string.format("%.1f", Temp1) -- 只保留一位小数
		--
        --Temp1 = string.format("%.1f", sensor.ds18b20(DS18B20_PIN, true) / 10) -- 读取温度1
        log.info('Temp1', Temp1, 'Temp2', Temp2)

        getPressure() -- 获取压力
        sys.wait(1500)
    end

end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
